package com.shujia.network.tcp;

import org.junit.Test;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

// 客户端发送文本内容给服务端，服务端将内容打印到控制台上。
// 使用字节流实现
public class TcpTest3 {

    @Test
    public void client() throws IOException {
        // 指定ip地址和端口号
        Socket s = new Socket(InetAddress.getLocalHost(), 6666);

        // 键盘录入
        Scanner sc = new Scanner(System.in);
        String msg = sc.next();

        // 图片的字节数据写入到Socket
        OutputStream os = s.getOutputStream();
        os.write(msg.getBytes());

        os.close();// 关闭输出流, 表示数据写入Socket完成
        sc.close();
        s.close();
    }


    // 客户端发送文件给服务端，服务端将文件保存在本地。
    @Test
    public void server() throws IOException {
        // 监听本机指定端口
        ServerSocket ss = new ServerSocket(6666);

        // 阻塞获取客户端的连接
        Socket s = ss.accept();

        // 读取文件到内存
        InputStream is = s.getInputStream();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] bys = new byte[1024];
        int len;
        // server不会自己关闭, 需要client的通知
        // client写入完成, server不需要阻塞等待了,跳出循环
        while ((len = is.read(bys)) != -1) {
            // 把Socket读取到的数据写入到内存
            baos.write(bys, 0, len);
        }

        System.out.println(baos);

        // 关闭资源
        baos.close();
        is.close();
        s.close();
        ss.close();


    }
}
